home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / c_windw / summary.doc < prev    next >
Text File  |  1987-12-30  |  48KB  |  1,182 lines

  1.  
  2.                      Marietta Systems "c_wndw" Toolkit 
  3.                      ================================= 
  4.  
  5. A  toolkit for Turbo C and Quick C that provides windows, menus,  formatted 
  6. entry,  and file access functions.  This toolkit makes it easy to  write  C 
  7. programs of professional appearance, quality, and performance.
  8.  
  9.  
  10.  
  11.                        1 - DESCRIPTION
  12.  
  13.                        2 - INSTALLATION
  14.  
  15.                        3 - QUICK REFERENCE
  16.  
  17.                        4 - REVIEW OF SAMPLE PROGRAMS 
  18.  
  19.                        5 - HEADER FILES
  20.  
  21.                        6 - CUSTOMIZATION
  22.  
  23.                        7 - ERROR REPORTING
  24.  
  25.                        8 - FUTURE ENHANCEMENTS
  26.  
  27.  
  28.  
  29.  
  30. This  manual and the c_wndw computer software is the copyright of  Marietta 
  31. Systems,  Inc.,  1987.  Marietta Systems, Inc. is located in  Cobb  County, 
  32. Georgia.
  33.  
  34. Duplication  of the shareware-issued computer  software  and   this  manual 
  35. for  non-commercial  purposes  is encouraged.   Amendment or  sale  of  the 
  36. computer software or manual not permitted except as specifically authorized 
  37. in writing by an officer of Marietta Systems, Inc.
  38.  
  39. Marietta Systems does NOT warrant that the computer software will meet your 
  40. requirements  or  that  the  operation of the  computer  software  will  be 
  41. uninterrupted and error free.  You are solely responsible for the selection 
  42. and  use of the computer software to achieve your intended results and  for 
  43. the results actually obtained.
  44.  
  45. Product specifications and features are subject to change without notice.
  46.  
  47. dBase III Plus is a trademark of Ashton-Tate.
  48.  
  49. Marietta Systems "c_wndw" Toolkit is a Trademark of Marietta Systems, Inc.
  50. 1.  DESCRIPTION
  51.     ===========
  52.  
  53. This  C  language toolkit provides input and  output  windowing  facilities 
  54. operating  at  professional speeds.  The output  windowing  facilities  use 
  55. memory  mapping  for instantaneous screen display, take full  advantage  of 
  56. color  monitors, and provide automatic editing of entry and output  fields.  
  57. Pull down and pop-up menu functions, help screens and multi-layered windows 
  58. easily provide a sophisticated user interface.
  59.  
  60. The toolkit is designed for both novice and intermediate C programmers  who 
  61. want  full screen, color, cursor control and windowing  facilities  without 
  62. programming  complex  escape  sequences or DOS-level  interrupts,  and  for 
  63. experienced programmers who require a set of fast I/O windowing functions.
  64.  
  65. A  full set of file access functions are provided that trap and handle  all 
  66. usual errors.  Access is supported to ASCII, dBase III Plus, hashed random, 
  67. and relative files.  
  68.  
  69. The  function key map facility allows the programmer to easily  enable  and 
  70. disable  function keys, and have the disabled keys immediately rejected  by 
  71. the c_wndw software when pressed by an operator.
  72.  
  73. Versions of the toolkit are available for the three main  compilers for IBM 
  74. PC  systems,  Borland  Turbo  C, Lattice C, and  Microsoft  Quick  C.   The 
  75. shareware issue software is available for Turbo C and Quick C.
  76.  
  77. The toolkit provides the following facilities:
  78.  
  79.      o  Very fast output to the screen 
  80.      o  Field editing on entry of numeric and date fields  
  81.      o  'UNDO' and 'HELP' facilities 
  82.      o  Cursor control within the bounds of the current window
  83.      o  Automatic change of colors between windows  
  84.      o  Pull down and pop-up menu functions
  85.      o  Flexible control of the use of the function keys
  86.      o  Error and message zones at the bottom of the screen
  87.      o  Optional status line at the top of the screen
  88.      o  US and foreign formats for date and decimal presentation
  89.      o  File access functions provide full error trapping
  90.      o  Field justification 
  91.      o  dBase III Plus '.DBF' files
  92.  
  93. The  subscription fee of $35 is strongly recommended for all users of  this 
  94. software  to take advantage of the facilities offered by  the  subscription 
  95. and to receive the official manual.
  96.  
  97. In   addition,   Marietta  Systems  offers  Corporate,   Development,   and 
  98. Educational license agreements with full source code availability.  Ask for 
  99. details when you send in your subscription fee.
  100. 1.1 The subscription fee
  101.     --------------------
  102.  
  103. When  you  subscribe  to  the Marietta Systems'  c_wndw  software  you  are 
  104. entitled to the following:
  105.  
  106. a) A copy  on  360  Kbyte 5.25" diskette(s) of the latest  version  of  the 
  107.     software for your selected C compiler with:
  108.  
  109.     * Full set of memory models 
  110.     * The source code for six of the functions:
  111.         helpmenu, helpscrn, mrt_brk, prn_scrn, top_spot, warble.
  112.     * Any enhanced facilities of the c_wndw software
  113.     
  114.     The  subscription fee includes the cost of distribution  and  handling, 
  115.     normally chargeable at $9.00.
  116.  
  117. b) The official manual for Marietta Systems' c_wndw software that features:
  118.     
  119.      * Full description of the c_wndw functions
  120.      * Major section on customization  
  121.      * Guidance on making full use of the software  
  122.      * Documentation on using the reserved functions
  123.      * Full error  code  analysis  section
  124.      * Documentation of the key and function key usage    
  125.  
  126.     This  manual  has a value of $18.00, but is only  available  with  your 
  127.     subscription,  or  as  part  of  a  corporate  or  educational  license 
  128.     agreement.
  129.  
  130. c) Your  first  year's  membership of the Marietta  Systems'  c_wndw  Error 
  131.     Reporting  and  Notification  Service, currently  worth  $14.00,  which 
  132.     provides:  
  133.  
  134.      * Periodic  notification of known errors  and  idiosyncrasies
  135.      * Access to the latest versions of the software 
  136.      * Acknowledgment of any bugs you properly document to us
  137.      * Waiver  of  handling and  distribution fees  on  the  next  software 
  138.           release to the first person to properly document to us a new  bug 
  139.           in our c_wndw software
  140.  
  141. d) A non-exclusive, non-transferable license to use the full version of the 
  142.     c-wndw  software  on a single computer  system.   This  license  has  a 
  143.     value  of $30.00, and  is  only  available  with  this    subscription,  
  144.     or  as  part  of  a  corporate  or  educational  license    agreement.
  145.  
  146. The $35.00  subscription fee is a $70.00 value.  Subscribe now and get  the 
  147. official manual and latest software described above.
  148.                     c_wndw Subscription form - 1.03
  149.                     ===============================
  150.  
  151. Mail to:            Marietta Systems, Inc
  152.                     c_wndw Subscription
  153.                     P.O. Box 71506
  154.                     Marietta, GA  30007  USA
  155.  
  156. Your name           ______________________
  157.     Company         ______________________
  158.     Street          ______________________
  159.     Suite/apt       ______________________
  160.     City            ______________________
  161.     State/prov      _____     
  162.     Zip/postcode    ___________
  163.     Country         ___________
  164.  
  165. Phone number        (_____)__________
  166.  
  167. Where did you get the shareware software?______________________
  168.  
  169. Your computer:
  170.     System model    ____________________     (ex; IBM PC/XT)
  171.     Hard disc MByte _________                (ex; 20MB)
  172.     Memory in Kbyte _________                (ex; 512 KB)
  173.     Color or Mono?  _________
  174.     Monitor adapter _________                (ex; CGA)
  175.     Printer         _________                (ex; Okidata 192+)
  176.     Operating system  ____________           (ex; MS/DOS v3.10)
  177.           (please specify version number)
  178.  
  179. Which C compilers do you support?
  180.     Borland's Turbo C - (Y / N) version _______
  181.     Lattice C         - (Y / N) version _______
  182.     Microsoft Quick C - (Y / N) version _______
  183.          Note:  one set of software for a C compiler is  provided 
  184.          with   the   subscription  fee,  additional   sets   are            
  185.          available for an extra dist & hdlg fee of $9.00 each.
  186.     Other C compilers (please specify) __________________________
  187.  
  188. Please  enclose  a  check or money order in US  Dollars  for  the 
  189. following amount:
  190.      
  191. 1    Subscription fee                        US $ 35.00
  192. __   Additional sets of s/w for more than one
  193.            C compiler @ $9.00 for dist & hdlg   $______ 
  194.      USA and Canada shipping charge  @ $2.00    $______
  195.      Overseas shipping charge        @ $9.00    $______
  196.      Georgia residents add $1.85 sales tax      $______
  197.                               TOTAL enclosed    $______
  198.  
  199. Note: We may not be able to ship to some overseas countries.
  200. 2.  INSTALLATION
  201.     ============
  202.  
  203. 2.1  System Configuration
  204.      --------------------
  205.  
  206. The  standard shareware diskette contains a set of software  for Quick   C, 
  207. and Turbo C users.  This software is available from ourselves  or through a 
  208. shareware distribution organization.  The software provided is as follows:
  209.  
  210.     complink.qui    A compile, link and run batch file for Quick C
  211.     complink.tur    A compile, link and run batch file for Turbo C
  212.     c_wndw.h        Header file for c_wndw software
  213.     c_wndw.qui      Quick C library for Small memory model
  214.     c_wndw.tur      Turbo C library for Small memory model
  215.     quickc.bat      Installation batch file for Quick C
  216.     turboc.bat      Installation batch file for Turbo C
  217.     summary.doc     This document
  218.     mtest.qui       Quick C "#include" file for sample programs
  219.     mtest.tur       Turbo C "#include" file for sample programs
  220.     readme          Instructions on printing this manual
  221.     *.c             Sample C programs showing use of c_wndw software
  222.     *.prj           Turbo C project make files for sample programs
  223.  
  224. You  will  need a PC, PC-XT, or PC-AT compatible system running  MS/DOS  or 
  225. PC/DOS  of version 2.1 or later, and a  monochrome or CGA-compatible  color  
  226. adapter.    The software will  run  with  an  EGA adapter.  You  will  also 
  227. need a copy of Borland's Turbo C or Microsoft's Quick C.
  228.  
  229. For  installation,  you will need access to a suitable PC with  a  diskette 
  230. drive plus either a second diskette drive or a hard disc.  The installation 
  231. and compilation batch files assume a hard disc, and will need modifying  if 
  232. you are using this in a diskette-only environment.
  233.  
  234. The software requires, at least, an 80 column width display.  It will  make 
  235. full  use  of  color  if available.  For  installation,  your  PC  must  be 
  236. configured for 80 column, 25 line mode, using color if available.  
  237.  
  238.  
  239. 2.2  Installation Procedure
  240.      ----------------------
  241.  
  242. 1) Place the distribution diskette in the first diskette drive (drive  a:), 
  243.     and type:
  244.  
  245.     for Quick C     A:QUICKC
  246.  
  247.     for Turbo C     A:TURBOC
  248.  
  249. 2)  The jobstream will now check for file "stdio.h" in the chosen directory 
  250.     on  the  default  disc  drive.  If  this  file  cannot  be  found,  the 
  251.     jobstream will terminate.
  252.  
  253. 3)  The jobstream will now copy the files.
  254.  
  255.  
  256. 2.3  Linking and headers
  257.      -------------------
  258.  
  259. Place  the header file in those programs that will be using  our  software, 
  260. ensure that the file follows the standard headers:
  261.      
  262.      #include <c_wndw.h>
  263.  
  264. Modify your link command to include our library, "c_wndw".
  265.  
  266. For example:
  267.  
  268. Quick  C,  the  command line compilation and linking needs  to  access  the 
  269.     c_wndw library.  See our run batch file COMPLINK for a working example.
  270.     Note  that this batch file assumes that the standard Quick C  libraries 
  271.     SLIBC.LIB and LIBH.LIB are available to it.  You may need to copy these 
  272.     off your Microsoft issue diskettes.
  273.  
  274.  
  275. Turbo  C  has  two compilation and  linking  environments.  
  276.     
  277.     The  integrated development environment needs to have .PRJ files  setup 
  278.     for each program with the line
  279.  
  280.           \turboc\lib\c_wndw.lib
  281.  
  282.     The    TCC    command   line   compiler   needs    to    have 
  283.     \turboc\lib\c_wndw.lib  added to the end of the command line.  See  our 
  284.     run batch file COMPLINK for a working example.
  285.  
  286.  
  287.  
  288. A   batch file, COMPLINK.BAT, is supplied that will compile, link  and  run 
  289. the sample programs.  Enter the command  
  290.  
  291.            COMPLINK program
  292.  
  293.       where 'program' is the name of the program without the '.C' 
  294.       suffix.
  295.  
  296. Note that we were only able to fit the code for the Small memory model  for 
  297. each type of C compiler on the shareware diskette.  This  means that  Quick 
  298. C  users  cannot  use the 'programming  environment'  which   requires  the  
  299. Medium model.  The other memory models are supplied when you  send  in your 
  300. subscription fee.
  301. 3.  QUICK REFERENCE
  302.     ===============
  303.  
  304. These  functions are designed for the novice and intermediate C  programmer 
  305. and  feature  extensive  parameter  checking  and  error  trapping.   Error 
  306. messages  are  output  the  the Error Area on the  screen  and  held  there 
  307. typically for 2 seconds before the program continues running.  In  addition 
  308. the  functions will, where possible, deduce sensible alternate  values  for 
  309. erroneous  parameters.   This defensive programming technique has  a  minor 
  310. performance  cost, and experienced programmers will want to take  advantage 
  311. of source code availability under the Development license agreement.
  312.  
  313. The functions are provided in seven classifications:-
  314.  
  315. Console input/output functions
  316.  
  317.     accept,  check_f,  display,  disp_err,  disp_msg,  disp_qry,  grabchar, 
  318.     helpscrn, idleloop, isendch, read_kb, warble
  319.  
  320. Date functions
  321.  
  322.     datecomp, datelong, datemath, dateread, date_in, date_out
  323.  
  324. Disc file access functions
  325.  
  326.     dbf_fld,  fileback,  fileclos, filedbf, fileinit,  fileopen,  fileread, 
  327.     fileseek, filewrit, file_err, hashmake, hashread, scrnsave
  328.  
  329. Field manipulation functions
  330.  
  331.     concat, fld_len, justify, primenbr, validate, v_bool 
  332.  
  333. Initialization and exit functions
  334.  
  335.     clr_scrn, goodbye, mrtbrk
  336.  
  337. Menu control functions
  338.  
  339.     helpmenu, menu, top_menu
  340.  
  341. Window control functions
  342.  
  343.     box_scrn,  clr_wndw,  mk_wndw,  prn_scrn,  rm_wndw,  scrn_map,  scroll, 
  344.     set_clr, set_crsr, top_spot
  345.  
  346. 3.1) Console Input/Output:
  347. --------------------------
  348.  
  349. int accept(byte* field, enum _JUST just, enum ATTRIB atb, int len, int dec)
  350.  
  351.           Accepts  entry  of a field at the current  cursor  position  with 
  352.           justification 'just', length 'len' with 'dec' decimal places, and 
  353.           color  pair attribute 'atb.'  The function returns  negative  for 
  354.           error,  zero if the ENTER key is used, and 1 if a valid  function 
  355.           key is used.  The function key code is stored in INCHAR.
  356.  
  357.           z = accept(money, decimal, alt_low, 7, 2);
  358.           z = accept(text, left, reverse, 25, 0);
  359.  
  360. void check_f(void)
  361.  
  362.           A reserved function used by the 'grabchar' function.
  363.  
  364. void display(byte* field, int rx, int ry, enum ATTRIB atb)  
  365.  
  366.           Displays the field at cursor position (rx, ry) within the current 
  367.           window  with  the  color pair attribute 'atb'.   The  string  can 
  368.           contain  any of the IBM graphics characters, in addition, to  the 
  369.           ASCII character set. 
  370.      
  371.           display("Enter invoice number", 4, 1, alt_low);
  372.           display(heading, 10, 2, high);
  373.  
  374. void disp_err(char* text, int errcode)
  375.  
  376.           Displays the text and the error code 'errcode' in the Error  Area 
  377.           on the right half of the bottom line of the screen.  A short tone 
  378.           will also be sounded.  The codes 200 through 999 are reserved  by 
  379.           the "c_wndw" software.
  380.  
  381.           disp_err("You must enter digits 0 to 9", 1001);          
  382.   
  383. void disp_msg(char* test,int errcode)  
  384.  
  385.           Displays  the  text and the error code 'errcode' in  the  Message 
  386.           Area on the left half of the screen's bottom line.
  387.  
  388.           disp_msg("Review, then press any key to continue", 1);
  389.  
  390. byte disp_qry(char* qrytext)   
  391.  
  392.           Displays  the query test the the Message area, and elicits a  Y/N 
  393.           response.  Returns zero for 'N', and 1 for 'Y'.
  394.  
  395.           if (disp_qry("Do you want to continue")) continue;
  396.  
  397. byte grabchar(void)     
  398.  
  399.           Returns  converted entry character and also sets this value  into 
  400.           INCHAR.   All  key stroke entries, including function  keys,  are 
  401.           converted into a single byte value.
  402.  
  403. int  helpscrn(byte* field)   
  404.  
  405.           A reserved function that makes the help screen for 'accept'.
  406.  
  407. void idleloop(int ticks)    
  408.  
  409.           Used  for  a delay of the clock ticks provided. 18 ticks  to  the 
  410.           second, 1092 to the minute.
  411.  
  412. int isendch(byte* field, byte c, enum ATTRIB atb)
  413.  
  414.           A reserved function used by the 'accept' function. 
  415.  
  416. void read_kb(void)      
  417.  
  418.           Accepts and discards a keyboard entry.
  419.  
  420. void warble(int tone)    
  421.  
  422.           Sets the speaker to the tone provided.  A tone of zero shuts  off 
  423.           the speaker.
  424.  
  425.  
  426. 3.2) Date functions:
  427. --------------------
  428.  
  429. Note: Dates are stored as unterminated 3 char arrays in compressed  format.  
  430.       Years in the range 1853 to 2107 can be stored in this format.    
  431.  
  432. int  datecomp(char* d1, char* d2)  
  433.  
  434.           Compares two compressed dates, returning zero if equal,  positive 
  435.           if 'd1' is higher, and negative otherwise.  
  436.  
  437. long datelong(char* d1)
  438.  
  439.           Converts  the  compressed date 'd1' to a count of the  number  of 
  440.           days since 1/1/80.  For example: Jan 2, 1980 will yield (1L), and 
  441.           Dec 31, 1979 will yield (-1L). 
  442.  
  443. void datemath(char* d1, int days)
  444.  
  445.           Adds  the specified number of days to the compressed  date  'd1'.  
  446.           The 'days' variable can be negative for subtraction.
  447.  
  448.           datemath(d1, 60);  /* increments the date in d1 by 60 days */
  449.  
  450. void dateread(char* d1)   
  451.  
  452.           Accesses  the  system  clock to gets  today's  date  in 
  453.           compressed format.
  454.  
  455. void date_in(char* d1, char* text) 
  456.           
  457.           Converts to an 8 char formatted date (ex: 10/11/82) to compressed 
  458.           3 char format.
  459.  
  460. void date_out(char* text, char* d1) 
  461.  
  462.           Converts a compressed date to a 8 character formatted date.
  463.  
  464.  
  465. 3.3) Disc file input/output:
  466. ----------------------------
  467.  
  468. Note: These functions  trap disc errors, and display a message to the Error 
  469.       Area of the screen.  If retry is sensible (ex: illegal disc  change), 
  470.       the   functions   will give the operator the option  of  retrying  or 
  471.       abandoning the operation.  It is not necessary for the programmer  to 
  472.       be concerned with 'errno' or the various DOS error codes.
  473.  
  474. int dbf_fld(int fh)
  475.  
  476.           This  returns  the number of fields in the data dictionary  of  a 
  477.           'dbase3'-type or 'hashed'-type file.
  478.  
  479. int  fileback(char* fname)
  480.  
  481.           This  erases any prior file with the ".bak" extension,  and  then 
  482.           renames the named file to have the ".bak" extension.  The backed-
  483.           up  file  is  set read-only.  The function  returns  negative  on 
  484.           error,  zero  if the file with name 'fname' cannot be  found,  or 
  485.           positive for success.
  486.  
  487. int  fileclos(int fh)    
  488.  
  489.           Closes the file with file handle 'fh'.  Returns zero for success, 
  490.           negative for error, or zero if the file is already closed.
  491.  
  492. int  filedbf(int fh)
  493.  
  494.           Used by the 'fileopen' function to setup the dBase III Plus  data 
  495.           dictionary for a valid 'dbase3'-type file.
  496.  
  497. int  fileinit(int fh, int start, int rec_len, long max_rec)
  498.  
  499.           Initializes  values  in the struct FN[fh] for the  record  length 
  500.           'rec_len', record count 'max_rec', and size of any header area at 
  501.           the front of the file in 'start'.  The function returns zero  for 
  502.           success,  and negative for an error.  It is not necessary to  use 
  503.           this    for   'hashed'-type  or  'dbase3'-type  files   as   this 
  504.           information is loaded automatically by 'fileopen'.
  505.  
  506. int  fileopen(char* fname, enum F_TYPE type, enum F_MODE mode) 
  507.  
  508.           Opens  the file given by 'fname' with file-type 'type' and  under 
  509.           file-mode  'mode'.  The function returns negative for  an  error, 
  510.           zero  if  the file cannot be found, or the positive  file  handle 
  511.           value if successful.
  512.  
  513.           fh1 = fileopen("testfile.doc", ascii, append);
  514.           fh2 = fileopen("c:\data\datafile.dbf", dbase3, update);
  515.  
  516. int  fileread(int fh, enum F_READ mode, long* rec_nbr) 
  517.  
  518.           Reads  a  record from a file with read-mode 'mode'.   The  record 
  519.           number  'rec_nbr'  is  used for 'relative' reads,  and,  for  all 
  520.           reads,  contains  the value of the record  number  following  the 
  521.           record  read.  The function returns zero for success or  negative 
  522.           for error.  The record is read into 'FN[fh].record'.
  523.  
  524.           z = fileread(fh1, nextrec, &rec_nbr1);
  525.           z = fileread(fh2, relative, &rec_nbr2);
  526.  
  527. int  fileseek(int fh, long loc)  
  528.  
  529.           Performs  a seek on the file to a specified byte location.   This 
  530.           function will be rarely used as the 'fileread' function  performs 
  531.           positioning as required.
  532.  
  533. int  filewrit(int fh, long* rec_nbr)  
  534.  
  535.           Write  'FN[fh].record' to the file.  For 'append' and  'recreate' 
  536.           access-mode  files, the record will always be written to the  end 
  537.           of  file, but for 'update' mode will be written to the  specified 
  538.           record number.  The record number will be set to the next  record 
  539.           following  the  one written.  The function  returns  negative  on 
  540.           error, zero for success.
  541.  
  542. int file_err(int fh, int count)
  543.  
  544.           A reserved function used by file access functions.
  545.  
  546. int  hashmake(char* fname, int fields, int rec_len, long max_rec, 
  547.           int key_off, int key_len)  
  548.  
  549.           Creates  an  empty  hashed file of name  'fname',  record  length 
  550.           'rec_len', and 'max_rec' pre-allocated records.  The location  of 
  551.           the  hash key within the record is starts at  position  'key_off' 
  552.           and  length  'key_len'.  The returns are as  for  the  'fileopen' 
  553.           function. The file is left open in 'update' mode.
  554.  
  555.           fh3 = hashmake("filetest.hsh", 10, 400, 1700L, 5, 8);
  556.  
  557. long  hashread(int fh, byte* key, int access) 
  558.  
  559.           Performs  hashed read to an opened 'hashed'-type file  using  the 
  560.           array 'key'.  The 'access' code should be zero to indicate that a 
  561.           matching  key is required, and 1 if an empty record  is  required 
  562.           (for an insert).  The function will return negative for error  or 
  563.           a positive number of the record number read.
  564.  
  565.           z = hashread(fh, (byte*)value, 0);
  566.  
  567. void scrnsave(int posn)
  568.  
  569.           A  reserved  function used by 'accept', 'read_kb'  and  'display' 
  570.           functions.
  571.  
  572.  
  573. 3.4) Field manipulation:
  574. ------------------------
  575.  
  576. byte* concat(byte* field, int spaces)
  577.  
  578.           Strips trailing spaces off the string 'field', optionally  adding 
  579.           1  or 2 depending on value of 'spaces'.  The function  returns  a 
  580.           pointer to the new end of the string.
  581.  
  582. int  fld_len(enum _JUST just, int len, int dec)  
  583.  
  584.           Returns  required  size  of  a  string  to  hold  a  field   with  
  585.           justification  'just' and size 'len' with decimal  places  'dec'.  
  586.           For  numeric  fields, the 'len' parameter refers  to  the  digits 
  587.           before the decimal point.
  588.  
  589.           len = fld_len(decimal, 7, 2);
  590.  
  591. void justify(enum _JUST just, byte* s1, byte* s2, int len, int dec)  
  592.  
  593.           Copies  and  justifies string 's2' into string  's1',  using  the 
  594.           length  parameters  'len' and 'dec'.  This function is  used  for 
  595.           automatically   expanding   and  truncating  strings,   and   for 
  596.           formatting and extracting numeric fields.
  597.  
  598.           justify(center, s1, s2, 25, 0);
  599.           justify(decimal, n1, s2, 7, 2);
  600.  
  601. int  v_bool(char c)      
  602.  
  603.           Returns 1 if 'N', 2 if 'Y', otherwise zero.
  604.  
  605.  
  606. 3.5) Initialization and exit:
  607. -----------------------------
  608.  
  609. void clr_scrn(char* title)    
  610.  
  611.           This  function  must  be called at the start of  the  program  to 
  612.           initialize  the  window  and file buffers used  by  the  "c_wndw" 
  613.           software.  It also clears the screen and sets up the base  window 
  614.           #0.   The  title  is displayed centered on  the  top  line.   The 
  615.           opening  can be shortened by  setting  a configuration variable.
  616.  
  617.           clr_scrn("Main screen title");
  618.  
  619. void goodbye(short errcode)   
  620.  
  621.           This  function  must be used to end the program.  It  closes  the 
  622.           files and resets the configuration changes made by the 'clr_scrn' 
  623.           function.   The  function does not return but  calls  the  'exit' 
  624.           function  with  the provided 'errcode' to end  the  program.   An 
  625.           'errcode'  of  zero is a normal exit, and non-zero  is  an  error 
  626.           exit.   Codes  of 200 through 254 are reserved  by  the  "c_wndw" 
  627.           software.
  628.  
  629. int  mrtbrk(void)
  630.  
  631.           A reserved function containing the CTRL+C break handling code.
  632.  
  633.  
  634. 3.6) Menu control:
  635. ------------------
  636.  
  637. int menu(char* menutext, int size, int start, int up)  
  638.  
  639.           Displays  the menu from the string 'menutext' within the  current 
  640.           window starting from the current cursor position.  Each menu item 
  641.           must  be  terminated  with a '&' character.   The  function  will 
  642.           display  the items with a maximum size of 'size' and   with  'up' 
  643.           items  per line.  A full screen size window with (size =  8)  and 
  644.           (up  =  9)  can accommodate up to 207 menu  items.   The  'start' 
  645.           parameter  indicates which item is to be  initially  highlighted.  
  646.           The  function returns negative for error, zero if the F10  (EXIT) 
  647.           key  is  used,  or a positive number corresponding  to  the  item 
  648.           selected.
  649.  
  650.           item = menu("Compact&Huge&Large&Small&", 8, 1, 1);
  651.  
  652. int top_menu(char* menutext, int size, int start)  
  653.  
  654.           This  function  displays  the menu across the  top  line  of  the 
  655.           screen.   The items have a maximum size of 27 bytes and the  full 
  656.           menu  must  fit on one line.  The returns are as for  the  'menu' 
  657.           function.
  658.  
  659.           item = top_menu("Lattice C&Quick C&Turbo C&", 12, 3);
  660.  
  661. void helpmenu(int item)  
  662.  
  663.           A  reserved function that provides the help screen for both  menu 
  664.           functions.
  665.  
  666.  
  667. 3.7) Windowing functions:
  668. -------------------------
  669.  
  670. Note: The  number of the current window is held in variable W_NUM, and  its 
  671.       size  and  location  in the struct  WINDOW[W_NUM].   Each  window  is 
  672.       provided  automatically  with  a  set of  6  color  pairs  which  are 
  673.       different  from  the  prior and following windows, and  the  top  and 
  674.       bottom screen lines. 
  675.  
  676. void box_scrn(void)
  677.  
  678.           Reserved function used by the 'mk_wndw' function.
  679.  
  680. void clr_wndw(void)
  681.  
  682.           Clears the current window.
  683.  
  684. int  mk_wndw(int ax1, int ay1, int ax2, int ay2, byte* title)
  685.  
  686.           Creates a window from the coordinates of its top left hand corner 
  687.           (ax1, ay1), and bottom right hand corner (ax2, ay2).  The  window 
  688.           is  boxed  in  with double lines for  delineation  on  monochrome 
  689.           screens  and for additional visual impact on color screens.   The 
  690.           'title'  is  centered over the top of the  window.  The  function 
  691.           returns negative on error, or a positive number corresponding  to 
  692.           the window just created. 
  693.  
  694.           w = mk_wndw(5, 5, 15, 75, "Test window");
  695.  
  696. void prn_scrn(void)
  697.  
  698.           A reserved function activated by the "Alt+P" key combination that 
  699.           prints  a translated copy of screen onto the main printer.   This 
  700.           works with any printer as the IBM graphics characters used by the 
  701.           'mk_wndw' function are translated to ASCII equivalents.
  702.  
  703. int  rm_wndw(void)                
  704.  
  705.           Removes  the  current window.  The function returns  negative  on 
  706.           error,  or  a positive number corresponding to  the  window  just 
  707.           removed.  (Window #0 cannot be removed.)
  708.   
  709. void scrn_map(byte* field, int ax, int ay)
  710.  
  711.           A  reserved  function  that places the 'field'  onto  the  screen 
  712.           starting at the (ax, ay) location.
  713.  
  714. void scroll(int incr, int head) 
  715.  
  716.           Scrolls the window up or down according to the 'incr'  parameter, 
  717.           leaving a heading area of 'head' lines unscrolled.  
  718.  
  719.           scroll(2, 3);
  720.  
  721. void set_clr(int wndw, enum ATTRIB atb)
  722.  
  723.           A reserved function used to change the color code.
  724.  
  725. void set_crsr(int rx, int ry)  
  726.  
  727.           Moves the cursor within the current window to the location  given 
  728.           by (rx, ry).  
  729.  
  730.           set_crsr(3, 10);
  731.  
  732. void top_spot(int val)     
  733.  
  734.           Refreshes the status values on the top line of the screen.  These 
  735.           status  values are the screen title, available memory,  character 
  736.           insert  status, date, and available capacity on the default  disc 
  737.           drive.   A 'val' of zero refreshes the whole line, (1)  refreshes 
  738.           the available memory, and (3) refreshes available disc.
  739.  
  740.  
  741. 3.8) Special definitions:
  742. -------------------------
  743.  
  744. enum ATTRIB {low, high, reverse, blink, blank, alt_low, alt_high,
  745.      alt_reverse};
  746.  
  747.           Defines  the  screen attribute code that selects which of  the  6 
  748.           color  pairs  are to be used, plus supports 'blink'  and  'blank' 
  749.           fields.   This  is used with the 'accept',  'display',  'set_clr' 
  750.           functions.
  751.  
  752. enum COLOR_OF {black, blue, green, cyan, red, magenta, yellow, white};
  753.  
  754.           Defines  the 8 base colors used by the software, which extend  to 
  755.           16 with the high/low intensity options.
  756.  
  757. enum fld_type {alphanum, graphic, flag, boolean, calendar, numeric, 
  758.      value, real, chrono}:
  759.  
  760.           Defined for future use.
  761.  
  762. enum F_READ {firstrec, previous, nextrec, lastrec, random, relative};
  763.  
  764.           Defines  file read mode for the 'fileread' function.   Note  that 
  765.           not all file types support all read modes.
  766.  
  767. enum F_MODE {append, readonly, recreate, update};
  768.  
  769.           Defines  the file access mode for the 'fileopen'  function.   All 
  770.           access  modes are available with all file types  except  'append' 
  771.           with 'hashed', and 'update' with 'ascii'.
  772.  
  773.  
  774. enum F_TYPE {ascii, binary, dbase3, hashed, marietta};
  775.  
  776.           Defines the file type for the 'fileopen' function.  'ascii'  type 
  777.           files  have  variable  length  records  terminated  with  "\r\n", 
  778.           whereas 'binary', 'dbase3', and 'hashed' files have fixed  length 
  779.           records which may contain binary information.
  780.  
  781. enum _JUST {left, right, as_typed, center, code, decimal, c_number, date, 
  782.      time};
  783.  
  784.           Defines field format (justification) codes used by the  'accept', 
  785.           'fld_len',  and  'justify'  functions. Note that  'time'  is  not 
  786.           currently supported.
  787.  
  788. struct CURSR {byte X,Y;} _CURSOR;  
  789.  
  790.           Contains current cursor location within current window.
  791.  
  792. typedef unsigned char byte;
  793. 4.  REVIEW OF SAMPLE PROGRAMS
  794.     =========================
  795.  
  796. The  sample programs provided with this software release cover  two  areas, 
  797. that of simple programs to demonstrate a facility of the software, and that 
  798. of full programs demonstrating the use of the functions in general.
  799.  
  800. We recommend that you compile and run the sample programs in the  following 
  801. sequence  to  get an understanding of the  "c_wndw"  functions  facilities, 
  802. before you address the complexity of the large sample programs.
  803.  
  804. The   Official   Manual  available  from  Marietta   Systems,   Inc.   with  
  805. your registration  fee gives full details on the functions, error  messages  
  806. and  the  customization variables.  Some techniques you may not  understand  
  807. will be explained in that manual.
  808.  
  809. To  compile,  link  and run a sample program, ensure that you  are  in  the 
  810. correct directory (\TURBOC for Turbo C and \QC for Quick C), and type in
  811.  
  812. COMPLINK program
  813.                   where 'program' is the name of the test program without 
  814.                   the ".C" file extension. (ex:  COMPLINK JUSTIFY1  ) 
  815.  
  816. 4.1) window
  817. -----------
  818.  
  819.     This program overlays five windows on the screen, showing the ease  and 
  820.     speed that windows can be created and removed.  The program also  shows 
  821.     the maximum boundaries of windows, and what happens when you are on the 
  822.     boundary.
  823.  
  824. 4.2 Color
  825. ---------
  826.  
  827.     This program demonstrates the full range of color variations  available 
  828.     with  the  standard  setup of the c_wndw toolkit.   If  you  amend  the 
  829.     default  color selections, run this program to check out your  changes.  
  830.     If your printer is available, press the Alt+P keys to print the screen.
  831.  
  832. 4.3) display1
  833. -------------
  834.  
  835.     This  program  shows the visual effect of the different values  of  the 
  836.     'enum ATTRIB' and the action of the 'display' function within a window.
  837.  
  838. 4.4) scroll1
  839. ------------
  840.  
  841.     This program demonstrates the operation of the 'scroll' function.
  842.  
  843. 4.5) cursor1
  844. ------------
  845.  
  846.     This program shows how the cursor is moved within a window, and how the 
  847.     'set_crsr' function corrects cursor coordinates outside of the window.
  848.  
  849. 4.6) justify1
  850. -------------
  851.  
  852.     This  program  demonstrates how the 'justify' function  is  applied  to 
  853.     handling the source string for a set of different justify commands, and 
  854.     field sizes.  Note that the numeric-type justifications read the source 
  855.     field from right to left, performing decimal alignment as necessary.
  856.  
  857. 4.7) warble1
  858. ------------
  859.  
  860.     This  program uses the 'warble' and 'idleloop' functions to  produce  a 
  861.     descending series of tones.
  862.  
  863. 4.8) accept1, accept2, accept3
  864. ------------------------------
  865.  
  866.     These  programs accept input of a column of fields to  demonstrate  the 
  867.     use  of the 'accept' function.  The 'accept1' program has a  column  of 
  868.     numbers, the 'accept2' program has a column of dates, and the 'accept3' 
  869.     program has a column of centered text strings of increasing size. 
  870.  
  871.     Note the validation of dates, and of the size of the number.  Try entry 
  872.     with INS:ON and INS:OFF to see the difference.  Use the F2-UNDO key  to 
  873.     undo changes to a field.  Press  the F1-HELP key for the help window.
  874.  
  875. 4.9) disp_xxx
  876. -------------
  877.  
  878.     This  program  demonstrates  the  use  of  the  'disp_err',  disp_msg', 
  879.     disp_qry' and 'read_kb' functions.
  880.  
  881. 4.10) menu_xxx
  882. --------------
  883.  
  884.     This  program  demonstrates  the  use  of  the  'top_menu'  and  'menu' 
  885.     functions.   Notice that if the menu items are in  ascending  sequence, 
  886.     with initial characters in uppercase, how you have the option of keying 
  887.     in the name or selecting the item using the cursor control keys.   Also 
  888.     press the F1-HELP key to see the standard help screen.
  889.  
  890. 4.11) filetest
  891. --------------
  892.  
  893.     This  program performs sequential reads and writes to 'ascii'-type  and 
  894.     'binary'-type  files.  It first creates and then writes to an  'ascii'-
  895.     type file.  The file is closed, re-opened, and read sequentially.   The 
  896.     program  then creates a 'binary'-type file, and copies to it  from  the 
  897.     'ascii'-type file.  Lastly, the 'binary'-type file is read backwards.
  898.  
  899. 4.12) writtest
  900. --------------
  901.  
  902.     This  program  reads  the 'ascii'-type file  created  by  the  previous 
  903.     program and copies to a 'binary'-type file.  You can then retrieve  any 
  904.     record randomly by its record number, and optionally amend the contents 
  905.     of  the record.  This is the first example of the function key  control 
  906.     facilities, to activate the F8-AMEND key.
  907.  
  908. 4.13) hashtest
  909. --------------
  910.  
  911.     This program creates a 'hashed'-type file, and then switches into  data 
  912.     entry  mode to allow you to insert, delete, view, or amend  records  in 
  913.     the  file.   Note the activation of the F5-INSERT, F6-DELETE,  and  F8-
  914.     AMEND keys for this purpose.
  915.  
  916.     At  the end of the program, it reads through the file and gives you  an 
  917.     analysis of the records EMPTY, IN_USE, and DELETED.
  918.  
  919. 4.14) bracket
  920. -------------
  921.  
  922.     This  is  a cute little programming aid that reads  through  a  program 
  923.     source  file  and  shows each line with a '{' or  '}'  character.   The 
  924.     program  also  displays the line number and the '{'  increment  number.  
  925.     Why not try this on the "hashtext.c" source code.  You  could amend the 
  926.     program to ignore '{' and  '}' within comments.
  927.  
  928. 4.15) textedit
  929. --------------
  930.  
  931.     This  is a line-oriented text editor.  It demonstrates a  sophisticated 
  932.     use  of  the  control  and function keys, and a  wide  variety  of  the 
  933.     "c_wndw"  functions.  This includes the 'fileback' function  to  backup 
  934.     the current text file before you write out the old file.  It has a  few 
  935.     bugs so do not use it on live files unless you correct them. 
  936.  
  937. 4.16) dbfdict
  938. -------------
  939.  
  940.     This  program  creates  the  data  dictionary  for  a  dBase  III  Plus 
  941.     compatible ".dbf" file.  Again this incorporates some sophisticated use 
  942.     of the facilities of the "c_wndw" software to achieve this aim.
  943.  
  944.     You   could   add  scrolling  facilities   (using  'textedit'   as   an 
  945.     example)  to  allow it to handle the full  128   fields  supported   by 
  946.     dBase  III  Plus.   In  addition, you  could  save  an   existing  data 
  947.     dictionary for amendment instead of starting anew each time.
  948.  
  949. 4.17) dbfedit
  950. -------------
  951.  
  952.     This  program uses the data dictionary of a dBase III  Plus  compatible 
  953.     file   to  insert, delete, view, or amend records at the  field  level.  
  954.     Use  the  file you created with 'dbfdict.  Notice the use  of  the  F3-
  955.     SEARCH key to initiate a non-context search.
  956.  
  957.     You  could improve this program by allowing long records to spill  onto 
  958.     multiple screens (using 'textedit' as an example) and support the  full 
  959.     128  fields allowed by dBase III Plus, or even index fields by  setting 
  960.     up 'hashed'-types files with a key and record number.
  961. 5.  HEADER FILES
  962.     ============
  963.  
  964. Each of  the  C  compilers has some differences in  header  files  and  the 
  965. minimum  set of header files for each  compiler is  provided  below.    The 
  966. 'install' jobstream will have placed a special file "mtest.h"  in the  sub-
  967. directory "/MARIETTA" with these header files defined.
  968.  
  969.  
  970. 5.1  Microsoft Quick C header files
  971.      ------------------------------
  972.  
  973.    #include <bios.h>
  974.    #include <conio.h>
  975.    #include <ctype.h>
  976.    #include <dos.h>
  977.    #include <fcntl.h>
  978.    #include <io.h>
  979.    #include <malloc.h>
  980.    #include <stddef.h>
  981.    #include <stdio.h>
  982.    #include <stdlib.h>
  983.    #include <string.h>
  984.    #include <c_wndw.h>
  985.  
  986.  
  987. 5.2  Turbo C header files
  988.      --------------------
  989.  
  990.    #include <alloc.h>
  991.    #include <conio.h>
  992.    #include <ctype.h>
  993.    #include <dir.h>
  994.    #include <dos.h>
  995.    #include <fcntl.h>
  996.    #include <mem.h>
  997.    #include <stddef.h>
  998.    #include <stdio.h>
  999.    #include <stdlib.h>
  1000.    #include <string.h>
  1001.    #include <c_wndw.h>
  1002. 6.  CUSTOMIZATION
  1003.     =============
  1004.  
  1005. The configuration constants in the header file <c_wndw.h> can be amended to 
  1006. customize  this  software.  All are implemented as variables,  rather  than 
  1007. '#define' constants, to allow their values to be set by software.  
  1008.  
  1009. Some of these "constants" can be dynamically changed by your program, while 
  1010. others  should  never  be changed after the 'clr_scrn'  function  is  first 
  1011. called to initialize the system.  
  1012.  
  1013. All  the  constants  come  with sensible default  values,  and  it  is  not 
  1014. necessary to set them to test out the system.
  1015.  
  1016. 6.1  "Hard" Constants
  1017.      ----------------
  1018.  
  1019. These constants must not be changed after the 'clr_scrn' function is called 
  1020. to initialize the system.
  1021.  
  1022. DISCBLCK  The maximum record size of any file to be accessed.
  1023. MAX_WIND  The maximum heap space to be used for window functions.  
  1024. MEM_WARN  The memory-low warning level.
  1025. TOP_LINE  The  number  of  lines dedicated for status  and  the  'top_menu' 
  1026.           function at the top of the screen. 
  1027. SCRN_LEN  The number of lines on the screen.  
  1028. SCRN_WID  The number of columns on the screen.
  1029. _COLOR    The maximum number of color pairs.  
  1030. _WINDW    The maximum allowed number of windows.  
  1031.  
  1032.  
  1033. 6.2  Internationalization
  1034.      --------------------
  1035.  
  1036. These constants must not be changed after the 'clr_scrn' function is called 
  1037. to initialize  the  system.  They are provided  to  support  common  inter-
  1038. national variations.
  1039.  
  1040. D_FORMAT  Provides the date format to be used:
  1041.           'U' = mm/dd/yy; 'E' = dd/mm/yy;  'I' = yy/mm/dd
  1042. D_PUNCT   Identifies the punctuation character for dates.
  1043. PERIOD    Identifies the decimal point character.
  1044. COMMA     Identifies the thousands separator character.
  1045. BOOL_YES  Identifies the uppercase boolean yes/true code.
  1046. BOOL_NO   Identifies the uppercase boolean no/false code.
  1047.  
  1048.  
  1049. 6.3  "Soft" Constants
  1050.      ----------------
  1051.  
  1052. ACC_DISP  The attribute used by 'accept' after entry.
  1053. D_20XX    Identifies the split between the 20th and 21st centuries for  two 
  1054.           digit year fields.  
  1055. ERR_BEEP  Length of the error beep used by 'disp_err' function.  
  1056. FLD_FULL  1 = auto enter on full field; 0 = requires ENTER.
  1057. KEYMATCH  See section 6.5.
  1058.  
  1059. 6.4  Setting the colors
  1060.      ------------------
  1061.  
  1062. The  colors should be amended in the header file, or revised prior  to  the 
  1063. 'clr_scrn' function being called to initialize the system.
  1064.  
  1065. There  are  three color constants, COLOR[], TOP_CLR,  and  ER_COLOR.   Each 
  1066. variable uses the struct CLR_TYPE.
  1067.  
  1068. The  color constant array COLOR[] defines the color sets available  to  the 
  1069. windows.   The ALT_CLR code is the number of the alternate color set to  be 
  1070. used for the 'alt_low', 'alt_high', and 'alt_reverse' attributes.  
  1071.  
  1072. The  TOP_CLR constant determines the color pair to be used for  the  status 
  1073. line and 'top_menu' function.
  1074.  
  1075. The  ER_COLOR constant determines the color pair to be used for the  bottom 
  1076. message and error line.
  1077.  
  1078.  
  1079. 6.5  Controlling the function keys
  1080.      -----------------------------
  1081.  
  1082. The  'isendch'  function uses a controlling array (KEYMATCH)  to  determine 
  1083. which  possible  function  keys are supported  by  your  program.   Setting 
  1084. applicable values into this array will enable or disable function keys.  
  1085.  
  1086. All function keys are translated to ensure that all ASCII and non-ASCII key 
  1087. combinations  are  represented as a single byte  code  Generally,  Wordstar 
  1088. conventions  are  followed by, for example, overlapping 'Ctrl+E'  and  left 
  1089. cursor  on  the  same  code.  The codes are  translated  by  the  'check_f' 
  1090. function, whose source code is available with a full software release.
  1091.  
  1092. Value Function key  Ctrl key  W/str   Preset meaning to 'accept'?
  1093. ----- ------------  --------  -----   ---------------------------
  1094.  
  1095.  3    PgDn                     *          No
  1096.  4    Right cursor   Ctrl+D    Y      Yes
  1097.  5    Up cursor      Ctrl+E    Y          No
  1098.  7    Del            Ctrl+G    Y      Yes
  1099.  8    Backspace      Ctrl+H    Y      Yes
  1100.  9    TAB            Ctrl+I    Y      Yes
  1101. 10    Ctrl+Enter     Ctrl+J    *      Yes   (if enabled)
  1102. 11    Shift+TAB      Ctrl+K    N      Yes
  1103. 18    PgUp           Ctrl+R    Y          No
  1104. 19    Left cursor    Ctrl+S    Y      Yes
  1105. 20    Ctrl+B/space   Ctrl+T    Y      Yes    - blank out field   
  1106. 22    Ins            Ctrl+V    Y      Yes
  1107. 23    Home           Ctrl+W    Y          No
  1108. 24    Down cursor    Ctrl+X    Y          No
  1109. 26    End            Ctrl+Z    Y          No
  1110. 27    Esc            Ctrl+[    Y      Yes
  1111. 7.  ERROR REPORTING
  1112.     ===============
  1113.  
  1114. Your subscription fee provides you with a one year membership of our c_wndw 
  1115. Error Reporting and Notification Service.  The service provides you with:
  1116.  
  1117. a) Notification,  via a newsletter, of known errors for a year  with  work-
  1118.     arounds, if known. 
  1119.  
  1120. b) Access  to  the  latest  version of the  software  with  bug  fixes  and 
  1121.     enhancements.
  1122.  
  1123. c) Acknowledgment of bugs and idiosyncrasies you report to us.
  1124.  
  1125. d) Waiver of handling and distribution fees on the next software release to 
  1126.     the  first person to properly document a new bug for us in  our  c_wndw 
  1127.     software. (We would like to think that there are no bugs)
  1128.  
  1129. The subscription form is on Page 4.
  1130.  
  1131. New users of the software who have not yet paid their subscription fee  may 
  1132. obtain  from us, free of charge, a list of any known bugs in  the  software 
  1133. provided through the shareware distributors, and suggested work-arounds.  
  1134.  
  1135. We  will  also  be pleased to receive your comments and and  views  on  the 
  1136. software, this manual, and how to improve and enhance this product.  
  1137.  
  1138. Write to us at:
  1139.           Marietta Systems, Inc.
  1140.           c_wndw Error Service
  1141.           P.O. Box 71506
  1142.           Marietta, GA  30007  USA  
  1143. 8.  FUTURE ENHANCEMENTS
  1144.     ===================
  1145.  
  1146. This  is the first release of the c_wndw software which provides  you  with 
  1147. windowing  and  file access software.  We have developed plans  for  future 
  1148. enhancements of this software, and would like to share them with you.
  1149.  
  1150. The  priority  for enhancements is in the file access area.  We  intend  to 
  1151. provide  a b-tree based multiple index ISAM handler (the  currently  unused 
  1152. 'marietta'  file  type), and generally improve performance  for  sequential 
  1153. reading and writing.
  1154.  
  1155. We also intend to expand support of the dBase III Plus file structure, as a 
  1156. well supported and defined database structure.
  1157.  
  1158. Record  locking  is  currently partially handled,  as  the  'fileread'  and 
  1159. 'filewrit' functions have a retry procedure for locked records, but do  not 
  1160. lock  records  themselves.  The design will be that  'fileread's  on  files 
  1161. opened 'update' will automatically set record locks, to be released on  the 
  1162. next  'fileread',  'fileseek' or 'filewrit' to that file.   We  would  also 
  1163. provide a new function to release unwanted locks without causing a read  or 
  1164. write.
  1165.  
  1166. We  also  intend to vigorously attack any software  bugs  or  environmental 
  1167. dependencies in our "c_wndw" software, so please isolate and document  them 
  1168. to us if you find any.  We believe that there are no significant bugs,  but 
  1169. want to know if we are wrong.
  1170.  
  1171. On  the  screen  handling side, we intend to be  compatible  with  major  C 
  1172. graphics toolkits, and to provide a Windows/Presentation Manager version of 
  1173. this package.
  1174.  
  1175. Well,  grand plans, but it is essential that those subscription  fees  keep 
  1176. coming  in to help us finance these enhancements.  The subscription fee  is 
  1177. really  worthwhile.  The Official Manual is far more usable than this  one, 
  1178. and  has lots of other useful information and indexes.  So  subscribe,  and 
  1179. help us take this product forwards. 
  1180.  
  1181. Look forward to hearing from you!!
  1182.